const path = require('path');
const fs = require('fs');

// function getFolder(path) {
//   let components = [];
//   fs.readdirSync(path).forEach((item) => {
//     if (
//       fs.lstatSync(path + '/' + item).isDirectory() &&
//       item !== 'components'
//     ) {
//       components.push(path + '/' + item);
//       components.push.apply(components, getFolder(path + '/' + item));
//     }
//   });
//   return components;
// }

module.exports = (plop) => {
  plop.setGenerator('module', {
    description: '创建一个默认模型',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: '请输入模型名字',
      },
      //   {
      //     type: 'input',
      //     name: 'name',
      //     message: '请输入页面文件名称',
      //     validate: (v) => (v ? true : '文件名不能为空'),
      //   },
    ],
    actions: (data) => [
        // 文件替换
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/{{kebabCase name}}.module.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/temp.module.hbs`),
      },
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/{{kebabCase name}}.service.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/temp.service.hbs`),
      },
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/{{kebabCase name}}.resolver.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/temp.resolver.hbs`),
      },
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/models/{{kebabCase name}}.entity.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/models/temp.entity.hbs`),
      },
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/dto/{{kebabCase name}}.type.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/dto/temp.type.hbs`),
      },
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/dto/{{kebabCase name}}.input.type.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/dto/temp.input.type.hbs`),
      },
      {
        type: 'add',
        path: path.join(__dirname,`src/modules/{{kebabCase name}}/dto/{{kebabCase name}}.output.type.ts`),
        templateFile: path.join(__dirname,`plopTemplates/module/dto/temp.output.type.hbs`),
      },
      {
        type: 'modify',
        path: './src/app.module.ts',
        pattern: /import {Module} from '@nestjs\/common';/,
        template: "import {Module} from '@nestjs/common';\nimport{ {{pascalCase name}}Module } from './modeles/{{kebabCase name}}/{{kebabCase name}}.module'",
      },
      {
        type: 'modify',
        path: './src/app.module.ts',
        pattern: /import: \[([\s\S]*?)\](?=\s*,\s*controllers)/g,
        template: "import:[$1 {{pascalCase name}}Module,\n ]",
      },
    ],
  });
};
// ``` ‌:ml-citation{ref="1,2" data="citationList"}

// ### 核心配置项
// - &zwnj;**生成器名称**&zwnj;（如`default-page`）：通过`setGenerator`定义，需包含描述、提示（prompts）和动作（actions）。
// - &zwnj;**提示（prompts）**&zwnj;：定义交互式命令参数，如目录选择、输入验证等。 ‌:ml-citation{ref="1,4" data="citationList"}
// - &zwnj;**动作（actions）**&zwnj;：执行文件生成逻辑，支持复制模板、运行脚本等操作。 ‌:ml-citation{ref="2,3" data="citationList"}

// ### 启动配置
// 在`:ml-search[package.json]`中添加脚本命令：
// ```json
// "scripts": {
//   "generate": "cross-env NODE_OPTIONS='--import tsx' plop --plopfile=plopfile.ts"
// }
// ``` ‌:ml-citation{ref="3,4" data="citationList"}
// 通过`npm run generate`或`yarn generate`启动生成流程。 ‌:ml-citation{ref="3,4" data="citationList"}

// :::ml-data{name=citationList}
// ```json
// [
//   {
//     source: {
//       logo: 'https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2005731947,4139443793&fm=195&app=88&f=JPEG?w=200&h=200',
//       name: 'CSDN博客',
//     },
//     isVideo: false,
//     title: 'Plop.js快速上手-CSDN博客',
//     thumbnail:
//       'http://t8.baidu.com/it/u=3180589329,3315239113&fm=217&app=137&f=JPEG?w=800&h=325&s=E1F0A2629FF094590E51DC0E0300A0C2',
//     linkInfo: {
//       'data-click-info': '{}',
//       href: 'https://blog.csdn.net/weixin_42190844/article/details/122733448',
//       target: '_blank',
//       'data-noblank': true,
//       'data-show': 'list',
//       'data-show-ext':
//         '{"pos":"1","component_content":{"component_name":"reference"}}',
//     },
//   },
//   {
//     source: {
//       logo: 'https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=3995954774,1214072087&fm=195&app=88&f=JPEG?w=200&h=200',
//       name: '掘金开发者社区',
//     },
//     isVideo: false,
//     title:
//       '前端工程化-使用plop生成项目模板文件plop.js是一个微型生成器框架,用于生成符合团队规范的模板文件。Plop.j - 掘金',
//     thumbnail:
//       'http://t9.baidu.com/it/u=1889704111,1546208672&fm=217&app=126&f=JPEG?w=208&h=219&s=20D233CAC3F4A66D4655CD040200A0C2',
//     linkInfo: {
//       'data-click-info': '{}',
//       href: 'https://juejin.cn/post/7362833213960208420',
//       target: '_blank',
//       'data-noblank': true,
//       'data-show': 'list',
//       'data-show-ext':
//         '{"pos":"2","component_content":{"component_name":"reference"}}',
//     },
//   },
//   {
//     source: {
//       logo: 'https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2005731947,4139443793&fm=195&app=88&f=JPEG?w=200&h=200',
//       name: 'CSDN博客',
//     },
//     isVideo: false,
//     title: 'Plop.js 教程:快速生成代码模板的微型框架',
//     linkInfo: {
//       'data-click-info': '{}',
//       href: 'https://blog.csdn.net/gitblog_00196/article/details/141517132',
//       target: '_blank',
//       'data-noblank': true,
//       'data-show': 'list',
//       'data-show-ext':
//         '{"pos":"3","component_content":{"component_name":"reference"}}',
//     },
//   },
//   {
//     source: {
//       logo: 'https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2005731947,4139443793&fm=195&app=88&f=JPEG?w=200&h=200',
//       name: 'CSDN博客',
//     },
//     isVideo: false,
//     title: '【亲测免费】 Plop.js 教程:快速入门与配置详解',
//     linkInfo: {
//       'data-click-info': '{}',
//       href: 'https://blog.csdn.net/gitblog_00602/article/details/141077036',
//       target: '_blank',
//       'data-noblank': true,
//       'data-show': 'list',
//       'data-show-ext':
//         '{"pos":"4","component_content":{"component_name":"reference"}}',
//     },
//   },
// ];
